tRPC初探,开源RPC框架新成员 | 您所在的位置:网站首页 › grpc rpc区别 › tRPC初探,开源RPC框架新成员 |
在最近的技术探索中,我触到了一个全新的开源RPC框架——tRPC。这个新框架给我留下了深刻的印象,我想借此机会分享一下我的初体验和一些观察。 什么是tRPC?tRPC是一个高性能、轻量级、支持多语言的开源RPC框架,基于插件化理念设计,整体特点: 易用性:tRPC提供了简洁明了的API和文档,使得开发者可以快速地上手并构建复杂的分布式系统。用户基于框架进行服务开发简单方便;高性能:tRPC使用了高效的序列化和反序列化机制,以及优化的网络通信协议,使得它在处理大量请求时能够保持出色的性能。框架具备高性能,能适用互联网海量访问场景。插件化:框架在架构设计和具体实现上进行分层和模块化,各个核心模块可拔插,并能够独立演进可扩展:tRPC允许开发者根据自己的需求进行定制和扩展,包括添加新的传输协议、序列化机制等。安全性:tRPC内置了丰富的安全特性,如身份验证、访问控制、加密等,以保障分布式系统的安全。具体可以查看官网(https://trpc.group/)和开源仓库(https://github.com/trpc-group)了解 小试tRPC首先我们先clone一下GitHub仓库中的trpc-go:git clone https://github.com/trpc-group/trpc-go,找到example目录下的helloworld目录: ![]() 按照文档我们可以先运行一下: server端 代码语言:shell复制cd trpc-go\examples\helloworld\server go run main.go -conf ./trpc_go.yamlclient端 代码语言:shell复制cd trpc-go\examples\helloworld\client go run main.go很明显我们发现tRPC服务端的运行是需要配置文件的,这个我们放在下面再讲,接下来我们仿照helloworld程序手动的了解下tRPC一个接口的创建和调用过程: 第一步:安装tRPC中对于protobuf文件的编译工具 代码语言:shell复制go install trpc.group/trpc-go/trpc-cmdline/trpc@latest第二步:在protobuf文件中增加接口定义 代码语言:text复制syntax = "proto3"; package trpc.helloworld; option go_package="trpc.group/trpc-go/trpc-go/examples/helloworld/pb"; service Greeter { rpc Hello (HelloRequest) returns (HelloReply) {} rpc Hi (HiRequest) returns (HiResponse) {} } message HelloRequest { string msg = 1; } message HelloReply { string msg = 1; } message HiRequest { string name = 1; } message HiResponse { string msg = 1; }第三步:编译protobuf文件(参考Makefile中的命令) 代码语言:shell复制trpc create -p helloworld.proto --rpconly --nogomod --mock=false第四步:编写RPC服务端接口实现 代码语言:go复制func main() { s := trpc.NewServer() pb.RegisterGreeterService(s, &Greeter{}) if err := s.Serve(); err != nil { log.Error(err) } } type Greeter struct{} func (g Greeter) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) { log.Infof("got hello request: %s", req.Msg) return &pb.HelloReply{Msg: "Hello " + req.Msg + "!"}, nil } func (g Greeter) Hi(ctx context.Context, req *pb.HiRequest) (*pb.HiResponse, error) { log.Infof("got hi request: %s", req.Name) return &pb.HiResponse{Msg: "Hi " + req.GetName() + "!"}, nil }第五步:RPC客户端调用接口 代码语言:go复制func main() { c := pb.NewGreeterClientProxy(client.WithTarget("ip://127.0.0.1:8000")) rsp, err := c.Hi(context.Background(), &pb.HiRequest{Name: "海风极客"}) if err != nil { log.Error(err) } log.Info(rsp.Msg) }最后依次运行服务端和客户端代码就可以了 与gRPC相比有什么不同因为在使用tRPC之前,最熟悉的还是gRPC,相比gRPC,我觉得tRPC在以下几个方面与之不同(也是刚刚了解,先分享主要的几个): (1)首先,名字不同 一个叫gRPC,由Google开源,一个叫tRPC,由腾讯开源 (2)tRPC更倾向于插件化 阅读源码后我们大概可以得出结论,虽然tRPC和gRPC都支持拦截器,但是tRPC能够通过抽象让用户自定义更多的插件并注入到服务中,增加了灵活性和可扩展性 (3)tRPC支持配置文件 配置文件应该是tRPC与gRPC最大的不同之一,当然通过简单的编码后两者都可以支持配置文件,但是tRPC作为原生就支持配置文件的RPC框架,可以用配置文件的配置内容来替代很多代码逻辑。其中配置文件最大的一个优势就是修改配置时无需重新编译源代码,节省了编译时间,但是如果对配置文件了解的不够全面,也可能是一个隐患,因此是需要一些学习理解的时间成本的,反正各有利弊吧。 小总结通过对tRPC的初步探索,我对这个开源RPC框架留下了深刻的印象。它的高性能、易用性、可扩展性和安全性使其成为构建分布式应用程序的理想选择。如果你正在寻找一个轻量级且功能强大的RPC框架,那么我强烈推荐你尝试一下tRPC,相信它会为你的项目带来意想不到的收获。 我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖! |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |